package revisao3;

import revisao1.Produto;

public class RepositorioProdutosArray<T extends Produto> implements RepositorioProdutos {

	//define a capacidade maxima do array;
	private int MAX_PRODUTOS = 100;
	
	// um array para armazenar os produtos;
	private T [] items;
	
	//uma variavel  para guardar o total de produtos;
	private int totalItems;
		
	public void RepositorioProdutosArray(){
		totalItems = 0;
		items = (T[]) new Object [MAX_PRODUTOS];
	}
	
	
	/**
	 * Recebe o codigo do produto e devolve o indice desse produto no array ou
     * -1 caso ele nao se encontre no array.
     * 
	 * @param codigo - o codigo do produto.
	 * @return - o indice no array.
	 */
	public int procurarIndice(int codigo){
		for (int i=0; i<totalItems;i++){
			if ( items[i].getCodigo() == codigo ){
				return i;
			}
		}
		
		return -1;
	}
	
	
	
	@Override
	public boolean existe(int codigo) {
		for (int i=0; i<totalItems;i++){
			if ( items[i].getCodigo() == codigo ){
				return true;
			}
		}
		return false;
	}

	@Override
	public void inserir(Object item) {
		//verifica a capacidade do array...
		if (totalItems < MAX_PRODUTOS)
			items[totalItems++] = (T) item;
	}

	@Override
	public void atualizar(Object item) throws Exception {

		for (int i=0; i<totalItems;i++){
			if ( items[i].getCodigo() == ((T)item).getCodigo() ){
				items[i] =(T) item;
				return;
			}
		}
		//lancar excecao...
		throw new Exception("Item nao esta Adicionado no Array!");
	}

	@Override
	public void remover(int codigo) throws Exception {
		if (existe(codigo)){
			int indice = procurarIndice(codigo);
			
			for (int i = indice; i < totalItems-1 ; i++){
				items[i] = items[i+1];
			}
			
			//decremente a quantidade de produtos;
			totalItems--; 
		}
		else
			throw new Exception("Item nao existe!");
		
	}

	@Override
	public T procurar(int codigo) throws Exception {

		if (existe(codigo)){
			int indice = procurarIndice(codigo);
			return items[indice];
		}
		else
			throw new Exception("Esse Item nao Existe!");
	}


}
